<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23">
<meta name="description" content="This chapter describes the overall functionality of the TraceX system analysis tool, including the overall functionality of its GUI.">
<title>Chapter 3 - Description of TraceX</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
</head>
<body class="article">
<div id="header">
<h1>Chapter 3 - Description of TraceX</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This chapter describes the overall functionality of the TraceX system analysis tool, including the overall functionality of its GUI.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_display_overview">Display Overview</h2>
<div class="sectionbody">
<div class="paragraph">
<p><strong>Figure 4</strong> shows the main display window of the TraceX system analysis tool. The layout is straightforward&#8212;&#8203;the execution contexts are represented by the vertical elements on the left side; e.g., initialization, interrupt, idle, and the various thread entries. The events that take place in each context are displayed horizontally on the same context line. For example, the <strong>QR</strong> events shown below show that <strong><em>thread 2</em></strong> is making successive calls to <strong><em>tx_queue_receive</em></strong>.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_10.png" alt="Screenshot of the main display window of the TraceX system analysis tool.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 5</strong></p>
</div>
<div class="paragraph">
<p>Context changes are represented by the vertical black lines that connect the context lines. The currently selected event is represented by a solid red vertical line. In this example, event 494 is selected.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_title_bar">Title Bar</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The TraceX title bar provides several pieces of useful information. First is the current version of TraceX. Second is the full path of the currently opened trace file. The example in <strong>Figure 6</strong> shows <strong><em>TraceX</em></strong> version <strong><em>6.0.0</em></strong> is displaying the <strong><em>demo_threadx.trx</em></strong> trace file.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_11.png" alt="Screenshot of the TraceX title bar.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 6</strong></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_tool_bar">Tool Bar</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The TraceX tool bar provides several buttons to open trace files and control elements of their display.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_12.png" alt="Screenshot of the TraceX tool bar.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 7</strong></p>
</div>
<div class="paragraph">
<p>The TraceX tool bar buttons&#8212;&#8203;from left to right&#8212;&#8203;are defined as follows:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top"><strong>Button</strong></th>
<th class="tableblock halign-left valign-top"><strong>Function</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_13.png" alt="Open trace file button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Open a trace file</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_14.png" alt="Open User Guide button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Open this User Guide</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_15.png" alt="Generate execution profile button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Generate execution profile</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_16.png" alt="Generate performance statistics button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Generate performance statistics</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_17.png" alt="Generate Thread Stack usage button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Generate Thread Stack usage</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_18.png" alt="Display selected event button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Display currently selected event</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_19.png" alt="Search button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Search for events</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_20.png" alt="Zoom in button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Zoom in.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_21.png" alt="Display zoom button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Select percentage of display zoom, where 100% means the entire trace file is displayed within the current view.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_22.png" alt="Zoom out button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Zoom out.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_23.png" alt="Select first event button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Select first event.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_24.png" alt="Display previous event page button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Display previous event page.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_25.png" alt="Display previous event button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Display previous event.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_26.png" alt="Next/previous navigation button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Determine how the next/previous navigation buttons operate. If <strong><em>Event</em></strong> is selected, navigation is done on the next/previous event. If <strong><em>Context</em></strong> is selected, navigation is done on the next/previous event on the specified context. If <strong><em>Object</em></strong> is selected, navigation is done on the next/previous event of the specified object; e.g., events associated with a specific queue. If <strong><em>Switches</em></strong> is selected, navigation is done on the next/previous change in context. If <strong><em>ID</em></strong> is selected, navigation is done on the next/previous event of the specified event ID.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_27.png" alt="Display next event button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Display next event.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_28.png" alt="Display next event page button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Display next event page.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="./media/user-guide/screen_shot_29.png" alt="Select last event button"></span></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Select last event.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="_display_mode_tabs">Display Mode Tabs</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TraceX displays system events in two different ways: <em>sequential</em> and <em>time relative</em>. The default mode is sequential and that is the mode shown in <strong>Figure 8</strong>.</p>
</div>
<div class="paragraph">
<p>Changing the mode is as simple as selecting the <strong><em>Sequential View</em></strong> or <strong><em>Time View</em></strong> tabs in the TraceX window. <strong>Figure 8</strong> shows the <strong><em>Sequential View</em></strong> and <strong><em>Time View</em></strong> tabs.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_30.png" alt="Screenshot of the Sequential View and Time View tabs.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 8</strong></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_sequential_view_mode">Sequential View Mode</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The sequential view mode is selected by the <strong><em>Sequential View</em></strong> tab shown in <strong>Figure 8</strong>. This is the default mode. In this mode, events are shown im../mediately following each other, regardless of the elapsed time between them. Note also the ruler above the display area in <strong>Figure 8</strong>. It shows the relative event number from the beginning of the trace.</p>
</div>
<div class="paragraph">
<p>This mode is the default mode and is useful in getting a good overview of what is going on in the system.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_time_view_mode">Time View Mode</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The time view mode is selected by the <strong><em>Time View</em></strong> button. <strong>Figure 9</strong> shows the same event trace as <strong>Figure 8</strong> except in time view mode. In this mode, events are shown in a time relative manner, with the solid green bar being used to show execution between events. This mode is useful to see where the bulk of processing is taking place in the system, which can help developers tune their system for greater performance and/or responsiveness.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_31.png" alt="Screenshot of the Time View tab.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 9</strong></p>
</div>
<div class="paragraph">
<p>Note also the ruler above the event display in <strong>Figure 9</strong>. This ruler shows relative ticks from the beginning of the trace, as derived from the time stamp instrumented in the event trace logging inside of ThreadX. If the time stamps are too close (low frequency timer), the events will run together. Conversely, if the time stamps are too far apart (high frequency timer), then the events will be too far apart. Choosing the right frequency time stamp is an important consideration in making the time relative view meaningful.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_system_summary_line">System Summary Line</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TraceX also provides a single summary line (the top context in <strong>Figure 10</strong>) that includes all events on the same line. This makes it easy to see an overview of a complex system. The summary bar is especially beneficial in systems that have many threads. Without such a summary line, you would have to follow complex system interactions using the vertical scroll bar to follow the context of execution.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_32.png" alt="Screenshot of the System Summary Line in the Sequential View tab.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 10</strong></p>
</div>
<div class="paragraph">
<p>The summary line contains a summary of the context as well as the corresponding event summary underneath. In the example shown in
<strong>Figure 10,</strong> it is easy to see that <strong><em>thread 2</em></strong> is executing and interrupted. The interrupt results in preemption by <strong><em>thread 3</em></strong>,
<strong><em>thread 6</em></strong>, <strong><em>thread 4</em></strong>, and <strong><em>thread 7</em></strong>, after which <strong><em>thread 2</em></strong> resumes execution.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_system_contexts">System Contexts</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TraceX lists the system contexts on the left-hand side of the display, as shown in <strong>Figure 11</strong>. Events that occur in a particular context are displayed on the horizontal line to the right of that context. In this way, you can easily ascertain which context the event occurred as well as follow that context line to see all the events that occurred in a particular context.</p>
</div>
<div class="paragraph">
<p>The first tow context entries are always the <strong><em>Interrupt</em></strong> and <strong><em>Initialize/Idle</em></strong> contexts. <strong><em>Interrupt</em></strong> context represents all system events made from Interrupt Service Routines (IRS). <strong><em>Initialize/Idle</em></strong> context represents two contexts in ThreadX. Events that occur during <strong><em>tx_application_define</em></strong>, are <strong><em>Initialize/Idle</em></strong> context. If the system is idle and thus no events are occurring, the green bar representing <strong><em>Running</em></strong> in the time view is drawn on the <strong><em>Initialize/Idle</em></strong> context.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_33.png" alt="Screenshot of the system contexts on the left-hand side of the display.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 11</strong></p>
</div>
<div class="paragraph">
<p>In the example in <strong>Figure 11</strong>, there are nine thread contexts, starting from the <strong><em>System Timer Thread</em></strong> context. Additional information about an individual context is available by placing the mouse on that context. The additional information includes the thread&#8217;s starting stack address, ending stack address, total size, percent used, relative execution percentage, number of suspension, resumptions, and its highest and lowest priority during the trace. <strong>Figure 12</strong> shows information for <strong><em>thread 0</em></strong>.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_34.png" alt="Screenshot of the information for thread 0.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 12</strong></p>
</div>
<div class="paragraph">
<p>Contexts may also be moved to group those of greater interest. This is accomplished by dragging and dropping the context or right-clicking on the context. Right-clicking on the context yields a dialog for moving the context to the top or the bottom.</p>
</div>
<div class="paragraph">
<p>Selecting <strong><em>Move to top</em></strong> results in the <strong><em>thread 3</em></strong> context being moved to the top of the context list, as shown in <strong>Figure 13</strong>.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_35.png" alt="Screenshot of the context being moved to the top of the context list.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 13</strong></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_thread_status_information">Thread Status Information</h2>
<div class="sectionbody">
<div class="paragraph">
<p>When enabled, TraceX displays the status of each thread via a colored line on the thread&#8217;s context. A green line indicates that the thread is in a "ready" state, while a line of any other color indicates the thread is suspended. For suspended threads, the color of the line indicates the type of ThreadX object that the thread is suspended on. For example, in <strong>Figure 13</strong> the green line on the <strong><em>System Timer Thread&#8217;s</em></strong> context starting at event 147 shows that the <strong><em>System Timer Thread</em></strong> is ready. Prior to event 147 and after event 154, the absence of the green line indicates that the <strong><em>System Timer Thread</em></strong> is ready. Prior to event 147 and after event 154, the absence of the green line indicates that the <strong><em>System Timer Thread</em></strong> is suspended.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_36.png" alt="Screenshot of the status of each thread via a colored line on the thread&#8217;s context.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 14</strong></p>
</div>
<div class="paragraph">
<p>There are three modes of thread status display, available via the <strong><em>Options -&gt; Status Lines</em></strong> menu. The <strong><em>Ready Only</em></strong> option only shows the ready (green) status lines, but does not display any suspension status lines. This is the default option for TraceX. The <strong><em>All On</em></strong> option enables the display of all status lines (ready and suspension).</p>
</div>
<div class="paragraph">
<p>Finally, the <strong><em>All Off</em></strong> option disables the display of all status lines.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_event_information_display">Event Information Display</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TraceX provides detailed information on some 600 run-time events, including ThreadX, FileX, NetX Duo, and USBX API calls and internal events. TraceX also supports up to an additional 61,439 unique user-defined events.</p>
</div>
<div class="paragraph">
<p>Regardless of whether sequential or time display mode is selected, a mouse-over on any event in the display area results in detailed event information displayed near the event. The mouse-over of event 143 in the demonstration <strong><em>demo_threadx.trx</em></strong> trace file is shown in <strong>Figure 15</strong>:</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_37.png" alt="Screenshot of the mouse-over of event 143 in a sample trace file">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 15</strong></p>
</div>
<div class="paragraph">
<p>Each event displayed contains standard information about <strong><em>Context</em></strong> and both the <strong><em>Relative Time</em></strong> and <strong><em>Time Stamp</em></strong>. The Context field shows what context the event took place in. There are exactly four contexts: thread, idle, ISR, and initialization. When an event takes place in a thread context, the thread name and its priority at that time is gathered and displayed as shown above. The <strong><em>Relative Time</em></strong> shows the relative number of timer ticks from the beginning of the trace. The <strong><em>Raw Time Stamp</em></strong> displays the raw time source of the event. Finally, all event-specific information is displayed. This information is detailed throughout the remainder of this chapter.</p>
</div>
<div class="paragraph">
<p>Detailed event information is also available by double clicking on any event. Double clicking on event 143 is shown in <strong>Figure 16</strong>:</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_38.png" alt="Screenshot of the detailed event information when an event is double clicked.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 16</strong></p>
</div>
<div class="paragraph">
<p>Being able to view multiple events at once gives the user a much richer view of what happened. Seeing them side by side is quite useful since many events are interrelated. This is accomplished by double clicking on multiple events.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_current_event_display">Current Event Display</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TraceX displays the current event&#8212;&#8203;in a separate window&#8212;&#8203;when selected by the user via <strong><em>View -&gt; Current Event</em></strong> or clicking on the current event button on the toolbar. After selected, TraceX displays the currently selected event in a stand-alone window and refreshes this window whenever another event is selected.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_event_searching">Event Searching</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TraceX provides an extensive event search capability. The event ID and information fields of each event are the primary search parameters. Not specifying a value for a search parameter indicates that parameter effectively removes that parameter from of the search. In addition, the search can be done such that any parameter found will satisfy the search or all parameters must be found to satisfy the search. The search may also be restricted to a particular context or cover all contexts in the trace. Invoking the event search is done by selecting the <strong><em>Search by Value</em></strong> button on the toolbar, as shown in <strong>Figure 17</strong>. When selected the search dialog is displayed, which specifies all the parameters for the search. The <strong><em>Next</em></strong> and <strong><em>Previous</em></strong> buttons in the search dialog can then be used to find the next and previous events that match the specified search criteria. <strong>Figure 17</strong> shows the search dialog.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_39.png" alt="Screenshot of the event search.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 17</strong></p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_40.png" alt="Screenshot of the search dialog.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 18</strong></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_zooming_in_and_out">Zooming In and Out</h2>
<div class="sectionbody">
<div class="paragraph">
<p>By default, TraceX displays the events at their full size. You may zoom in or zoom out as desired. Zooming out is useful to see the overall events captured in the trace, while zooming in is useful in conditions where the events overlap because of the resolution of the time stamp source. <strong>Figure 19</strong> shows the <strong><em>demo_threadx.trx</em></strong> file zoomed out so that 100% of the trace file is shown.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_41.png" alt="Screenshot of a sample file zoomed out so that 100% of the trace file is shown.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 19</strong></p>
</div>
<div class="paragraph">
<p>When zoomed out at 100% to show the entire trace within the current display page, it is easy to see all the context execution captured in the trace as well as the general events occurring within those contexts. Notice in <strong>Figure 16</strong> that <strong><em>thread 1</em></strong> and <strong><em>thread 2</em></strong> execute most often. The blue coloring for their events also suggests that these threads are making queue service calls (queue events are blue in color).</p>
</div>
<div class="paragraph">
<p>Restoring to a full icon view is equally easy; Either the zoom-in button may be selected repeatedly or some factor of 100 may be entered.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_delta_ticks_between_events">Delta Ticks Between Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Determining the number of ticks between various events in TraceX is easy&#8212;&#8203;click on the starting event and drag the mouse to the ending event. The delta number of ticks between the events shows up in the upper right-hand corner of the display, as shown in <strong>Figure 17</strong>.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_42.png" alt="Screenshot of the delta number of ticks between the events.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 17</strong></p>
</div>
<div class="paragraph">
<p>The delta ticks shown in <strong>Figure 17</strong> show that 5032 ticks have elapsed between event 125 and event 154. This could also be calculated manually by looking at the relative time stamps in each event and subtracting, but using the GUI is easy and instantaneous.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_actual_time_display">Actual Time Display</h2>
<div class="sectionbody">
<div class="paragraph">
<p>When enabled, TraceX displays the actual time in microseconds in <strong><em>Time View</em></strong> and for the various delta time information displayed by TraceX. By default, the actual time display is disabled. To enable the actual time display, the number of ticks per microsecond must be entered via the <strong><em>Options -&gt; Ticks per Microsecond</em></strong> menu selection (the value to enter is determined by the hardware timer source used for the TraceX event logging on the target).</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_priority_inversions">Priority Inversions</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TraceX automatically displays priority inversions detected in the trace file. Priority inversions are defined as conditions where a higher-priority thread is blocked trying to obtain a mutex that is currently owned by a lower-priority thread. This condition is termed <em>deterministic</em>, because the system was set up to operate in this manner. To inform the user, TraceX shows <em>deterministic</em> priority inversion ranges as a light salmon color.</p>
</div>
<div class="paragraph">
<p>TraceX also displays <em>non-deterministic</em> priority inversions. These priority inversions differ from the <em>deterministic</em> priority inversions in that another thread of a different priority level has executed in the middle of what was a <em>deterministic</em> priority inversion, thereby making the time within the priority inversion somewhat <em>non-deterministic</em>. This condition is often unknown to the user and can be very serious. In order to alert the user of this condition, TraceX shows <em>non-deterministic</em> priority inversions as a brighter salmon color. <strong>Figure 18</strong> shows both <em>deterministic</em> and <em>non-deterministic</em> priority inversions.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="./media/user-guide/screen_shot_43.png" alt="Screenshot of the priority inversion in a trace file.">
</div>
</div>
<div class="paragraph">
<p><strong>FIGURE 18</strong></p>
</div>
<div class="paragraph">
<p><strong>Figure 18</strong> shows a <em>deterministic</em> priority inversion from event 398 through event 402. In this range, the higher-priority <strong><em>thread 0</em></strong> blocks on a mutex owned by a lower-priority <strong><em>thread 1</em></strong>. At event 402, <strong><em>thread 1</em></strong> releases the mutex and thus ends the priority
inversion.</p>
</div>
<div class="paragraph">
<p>The brighter shaded area shows a <em>non-deterministic</em> priority inversion between event 408 through event 420. What makes this <em>non-deterministic</em> is that while <strong><em>thread 1</em></strong> holds the mutex that higher-priority <strong><em>thread 0</em></strong> is blocked on, an interrupt occurs that resumes <strong><em>thread 2</em></strong>, which then executes and lengthens the time the system is in priority inversion. This condition can be quite serious and difficult to identify; however, with TraceX it is easily identified.</p>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2025-02-07 08:25:21 UTC
</div>
</div>
</body>
</html>